﻿using System;
using System.Collections.Generic;

using SimpleForum.Data.Models;
using SimpleForum.Data.Repositories;

namespace SimpleForum.Data.Services
{
    public interface IUserService : IService
    {
        User GetUser(int Id);
        User GetUserByEmail(string Email);
        User GetUserByUsername(string Username);
        IEnumerable<User> GetUsers();
        void UpdateField(int UserId, SimpleForum.Data.Services.UserService.Fields Field, string Value);
        bool Login(string Email, string Password, string Data = "");
        void CreateAuthTicket(string Email, string Data = "");
        void Logout();
        User CreateUser(string Username, string Email, string Password, string Avatar, out System.Web.Security.MembershipCreateStatus Status);
        void AddReputation(int UserId, SimpleForum.Data.Services.UserService.ReputationType Type, string URL);
        void AddReputation(User User, SimpleForum.Data.Services.UserService.ReputationType Type, string URL);
        void GiveAchievement(int UserId, SimpleForum.Data.Services.UserService.AchievementType Type);
        void GiveAchievement(User User, SimpleForum.Data.Services.UserService.AchievementType Type);
        bool HasAchievement(int UserId, SimpleForum.Data.Services.UserService.AchievementType Type);
        bool HasAchievement(User User, SimpleForum.Data.Services.UserService.AchievementType Type);
        IEnumerable<Notification> GetNotifications(int UserId);
        IEnumerable<Notification> GetNotifications(User User);
        void ReadNotification(int UserId, int NotificationId);
        void AddNotification(int UserId, string Message);
    }
}